import Vue from 'vue';
import App from './App';
// 引入vuex
import Vuex from 'vuex';
import VueRouter from 'vue-router';
import VueResource from 'vue-resource';
import router from './router/router';
// 全部引入mint-ui及其css
import MintUI from 'mint-ui';
import 'mint-ui/lib/style.css';
import './common/css/common.less';

Vue.use(Vuex);

Vue.use(VueRouter);

Vue.use(VueResource);

Vue.use(MintUI);

Vue.config.productionTip = false;

Vue.filter('formatDate', function(dateStr, pattern = 'yyyy-MM-dd hh:mm') {
  let dt = new Date(dateStr);
  let year = dt.getFullYear();
  let month = dt.getMonth() < 9 ? '0' + (dt.getMonth() + 1) : dt.getMonth() + 1;
  let day = dt.getDate() < 10 ? '0' + dt.getDate() : dt.getDate();
  if (pattern.toLowerCase() === 'yyyy-mm-dd') {
    return `${year}-${month}-${day}`;
  } else {
    let hour = dt.getHours() < 10 ? '0' + dt.getHours() : dt.getHours();
    let minutes = dt.getMinutes() < 10 ? '0' + dt.getMinutes() : dt.getMinutes();
    return `${year}-${month}-${day} ${hour}:${minutes}`;
  }
});
// 创建一个store
const store = new Vuex.Store({
  state: {
    // 这里需要储存一个对象，结构如下：
    // {
    // id:xx;
    // name:xxx;
    // price:xxx;
    // count:xxx;
    // }
    // ShopCar储存需要在多个组件中调用的商品属性
    ShopCar: []
  },
  mutations: {
    // 添加商品
    increase(state, food) {
      if (state.ShopCar.length === 0 || state.ShopCar
        .every(o => { return o.id !== food.id; })) {
        state.ShopCar.push(food);
      } else {
        state.ShopCar.some(item => {
          if (item.id === food.id) {
            item.count++;
            return true;
          }
        });
      }
    },
    // 删除商品
    reduce(state, id) {
      state.ShopCar.some((item, index) => {
        if (id === item.id) {
          item.count--;
          if (item.count === 0) {
            state.ShopCar.splice(index, 1);
          }
          return true;
        }
      });
    },
    // 清空商品
    clearAll(state) {
      this.state.ShopCar.splice(0);
    }
  },
  getters: {
    // 商品总价
    TotalPrice: function(state) {
      let total = 0;
      state.ShopCar.forEach(item => {
        total += parseInt(item.count) * parseInt(item.price);
      });
      return total;
    },
    // 商品总数
    TotalCount: function(state) {
      let count = 0;
      state.ShopCar.forEach(item => {
        count += parseInt(item.count);
      });
      return count;
    },
    // 返回一个{id:count}形式的对象，来关联goods页面中的商品数量
    FoodCount: function(state) {
      // 1.创建一个FoodCount空对象
      let FoodCount = {};
      // 2.遍历已储存的所有商品,将每个商品的id和count以
      // id:count的形式添加到FoodCount对象中作为键值对
      state.ShopCar.forEach(item => {
        FoodCount[item.id] = item.count;
      });
      // 3.返回这个对象
      return FoodCount;
    }
    // payDesc() {
    //   if (this.TotalPrice > 0 && this.TotalPrice < 20) {
    //     let pay = 20 - TotalPrice;
    //     return pay
    //   }
    // }
  }
});

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  render: h => h(App),
  store
});
